
package DAO;

import Connection.ConnectionFactory;
import Interfaces.Inter_Usuario;
import Model.Usuario;
import Model.Nivel;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


public class DAO_Usuario implements Inter_Usuario{
     
    Connection con;
     
     public DAO_Usuario() throws Exception{
        try{
            this.con =ConnectionFactory.getConnection();
        }
        catch(Exception e){
            throw new Exception("Erro ao conectar no Usuario\n"+e.getMessage());
        }
    }
     
      public void GravaUsuarios(Usuario usuario) throws Exception{
        PreparedStatement ps =null;

        if(usuario ==null)
            throw new Exception("Nao pode gravar um usuário nulo");

        try{
            String sql ="INSERT INTO USUARIO (ID_Usuario, NOM_Usuario, FK_Nivel) values(?,?,?)";
            ps =con.prepareStatement(sql);
            ps.setInt(1,usuario.getID_Usuario());            
            ps.setString(2,usuario.getNOM_Usuario());
            ps.setInt(3, usuario.getFK_Nivel());
            ps.executeUpdate();
        }
         catch(SQLException e)
        {
            throw new Exception("Erro ao inserir USUARIO \n"+e.getMessage());
        }
    }
      
       public void ExcluiUsuarios(Usuario usuario) throws Exception
     {
        PreparedStatement ps =null;

        if(usuario ==null)
        throw new Exception("Não pode excluir uma USUARIO nulo");

        try
        {
            ps =con.prepareStatement("delete from USUARIO where ID_Usuario =?");
            ps.setInt(1,usuario.getID_Usuario());
            ps.executeUpdate();
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao excluir USUARIO \n"+e.getMessage());
        }
    }

    public void AlteraUsuarios(Usuario usuario) throws Exception{
        PreparedStatement ps =null;

        if(usuario ==null)
            throw new Exception("Não pode alterar usuario nulo");
        try
        {
            String sql ="update usuario set NOM_Usuario= ?";

            ps =con.prepareStatement(sql);
            ps.setString(1, usuario.getNOM_Usuario());
            ps.executeUpdate();
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao alterar dados USUARIO\n"+e.getMessage());
        }
    }
    
     public List ListaUsuarios() throws Exception{
        PreparedStatement ps =null;
        ResultSet rs =null;
        try
        {
            ps =con.prepareStatement("select * from usuario order by FK_Nivel asc");
            rs =ps.executeQuery();

            List<Usuario> list = new ArrayList<Usuario>();

            while(rs.next())
            {
                int ID_Usuario =rs.getInt(1);
                String NOM_Usuario =rs.getString(2);
                int FK_Nivel =rs.getInt(3);
                

                Usuario usuario = new Usuario(ID_Usuario,NOM_Usuario,FK_Nivel);
                
                list.add(usuario);
            }
            return list;
        }
        catch(SQLException e)
        {
            throw new Exception("Erro ao listar USUÁRIOS \n"+e.getMessage());
        }
    }
     
      public Usuario LocalizaUsuarios(int ID_Usuario) throws Exception{
        PreparedStatement ps =null;
        ResultSet rs = null;

        if(ID_Usuario == 0)
            throw new Exception("Não pode Localizar USUARIO de ID igual a 0");

        try
        {
            ps =con.prepareStatement("select * from Usuario where ID_Usuario = ?");
            ps.setInt(1, ID_Usuario);
            rs =ps.executeQuery();

            if(!rs.next())
                throw new Exception("Não foi encontrado nenhum USUARIO com o ID "+ID_Usuario);

            String NOM_Usuario = rs.getString(2);
            int FK_Nivel = rs.getInt(3);

             Usuario usuario = new Usuario(ID_Usuario,NOM_Usuario,FK_Nivel);
             return usuario;
        }catch(SQLException e)
        {
            throw new Exception("Erro ao localizar usuario \n"+e.getMessage());
        }
    }
    
}
